package com.qf.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.qf.model.entity.OutpatientRecharge;
import com.qf.service.OutpatientRechargeService;

import java.util.ArrayList;
import java.util.List;

/**
* @desc:
* @author: ZHY
* @date: 2024/5/5,2:08
*/

public class OutpatientRechargeListener extends AnalysisEventListener<OutpatientRecharge> {

    private List<OutpatientRecharge> list = new ArrayList<>();

    // 配置每次批量导入5条
    private static  final  int BATCH_COUNT=5;

    // 无法通过注释注入对象(listener没有创建容器),只能使用构造方法创建对象
    private OutpatientRechargeService outpatientRechargeService; // 构建时传递studentService

    // 无参构造

    public OutpatientRechargeListener() {}

    // 有参构造
    public OutpatientRechargeListener(OutpatientRechargeService outpatientRechargeService) {
        this.outpatientRechargeService = outpatientRechargeService;
    }


    @Override // 每读取一行 excel 都会回调此方法
    public void invoke(OutpatientRecharge outpatientRecharge, AnalysisContext analysisContext) {
        // 每读取一行加入list中
        list.add(outpatientRecharge); // 先暂存

        // 如果list找那个数据量大于BATCH_COUNT
        // 调用批量导入方法saveData()
        if (list.size()>=BATCH_COUNT){
            saveData();// 调用批量导入
            list.clear(); // 清空已经导入的数据
        }
    }

    @Override // 到读取表格完毕时 会回调此方法
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // 最后剩余的数据个数小于BATCH_COUNT,invoke不再导入
        // doAfterAllAnalysed最后再批量导入一次
        if (list.size()>0){
            saveData();
            list.clear();
        }
    }

    /**
     * 封装：批量导入方法
     */
    private void  saveData(){
        System.out.println("开始批量导入");
        outpatientRechargeService.insertBatch(list);
        System.out.println("结束批量导入");

    }
}
